import json
import os
from langfuse import Langfuse
from tqdm import tqdm 
from dotenv import load_dotenv
load_dotenv()

# 定义数据集路径
DATASET_PATH = os.path.join(
   os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
    'datasets', 'Archer', 'zh_data', 'dev.json'
)


def load_json_data(file_path):
    """
    加载JSON文件数据
    
    Args:
        file_path: JSON文件路径
    
    Returns:
        dict: 解析后的JSON数据
    
    Raises:
        FileNotFoundError: 文件不存在
        json.JSONDecodeError: JSON格式错误
    """
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"文件不存在: {file_path}")

    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    except json.JSONDecodeError as e:
        raise json.JSONDecodeError(f"JSON格式错误: {e.msg}", e.doc, e.pos)


def process_archer_data(data):
    """
    处理Archer数据集数据
    
    Args:
        data: 解析后的JSON数据
    
    Returns:
        list: 处理后的结果列表
    """
    # 根据实际数据结构调整处理逻辑
    # 这里提供一个通用示例
    data_to_upload = []
    if isinstance(data, list):
        for idx, item in enumerate(data):
            # 假设每个项目有'question'和'answer'字段
            entry = {
                "instruction":item["commonsense_knowledge"],
                "input":item["question"],
                "expected_output": item["query"]
            }
            data_to_upload.append(entry)
            if idx>=5:
                break
    else:
        print(f"不支持的数据类型: {type(data)}")

    return data_to_upload


def main():
    """主函数"""
    try:
        # 加载JSON数据
        print(f"加载数据: {DATASET_PATH}")
        data = load_json_data(DATASET_PATH)
        print(f"成功加载数据，共 {len(data) if isinstance(data, list) else 1} 条记录")

        print(data[0])

        # 处理数据
        data_to_upload = process_archer_data(data)
        dataset_name="archer"
        langfuse = Langfuse()
        dataset_len=len(data_to_upload)
        #调用tqdm进度条组件来运行时展示进度
        for item in tqdm(data_to_upload[:dataset_len]):
            langfuse.create_dataset_item(
                ## 注意：这个dataset_name需要提前在Langfuse后台创建
                dataset_name=dataset_name,
                input={
                    "text": item["instruction"]+item["input"]
                },
                # any python object or value, optional
                expected_output={
                    "text": item["expected_output"]
                },
                # metadata, optional
                metadata={
                    "dataset":"archer",
                }
            )

    except FileNotFoundError as e:
        print(f"错误: {e}")
        print("提示: 请确保 datasets/Archer/zh_data/ 目录下存在 dev.json 文件")
    except json.JSONDecodeError as e:
        print(f"错误: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")


if __name__ == '__main__':
    main()